﻿ using System.Text.Json.Serialization;

namespace Sirius.Entity
{
    public class Message
    {
        //消息ID
        [JsonPropertyName("id")]
        public string id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string channel_Id { get; set; }

        //频道ID
        [JsonPropertyName("guild_id")]
        public string guild_Id { get; set; }

        //消息内容
        [JsonPropertyName("content")]
        public string Content { get; set; }

        //消息创建时间
        [JsonPropertyName("timestamp")]
        public DateTime TimeStamp { get; set; }

        //消息编辑时间
        [JsonPropertyName("edited_timestamp")]
        public DateTime Edited_timeStamp { get; set; }

        //是否是@全员消息
        [JsonPropertyName("mention_everyone")]
        public bool mention_Everyone { get; set; }

        //消息创建者
        [JsonPropertyName("author")]
        public User Author { get; set; }

        //附件
        [JsonPropertyName("attachments")]
        public MessageAttachment[] Attachments { get; set; }

        //embed
        [JsonPropertyName("embeds")]
        public MessageEmbed[] Embeds { get; set; }

        //消息中@的人
        [JsonPropertyName("mentions")]
        public User[] Mentions { get; set; }

        //消息创建者的member信息
        [JsonPropertyName("member")]
        public Member Member { get; set; }

        //ark消息
        [JsonPropertyName("ark")]
        public MessageArk Ark { get; set; }

        //用于消息间的排序，seq 在同一子频道中按从先到后的顺序递增，
        //不同的子频道之间消息无法排序。(目前只在消息事件中有值，后续废弃)
        [JsonPropertyName("seq")]
        public int Seq { get; set; }

        //子频道消息 seq，用于消息间的排序，
        //seq 在同一子频道中按从先到后的顺序递增，
        //不同的子频道之间消息无法排序
        [JsonPropertyName("seq_in_channel")]
        public string Seq_In_Channel { get; set; }

        //引用消息对象
        [JsonPropertyName("message_reference")]
        public MessageReference Message_Reference { get; set; }
    }

    //附件
    public class MessageAttachment
    {
        //下载地址
        [JsonPropertyName("url")]
        public string url { get; set; }

        //附件类型
        [JsonPropertyName("content_type")]
        public string content_type { get; set; }
        //附件名称
        [JsonPropertyName("filename")]
        public string filename { get; set; }

        //附件ID
        [JsonPropertyName("id")]
        public string id { get; set; }

        //附件大小
        [JsonPropertyName("size")]
        public int size { get; set; }

        //width不知道是啥玩意,可能是图片宽度吧
        [JsonPropertyName("width")]
        public int width { get; set; }

        //height可能是图片高度
        [JsonPropertyName("height")]
        public int height { get; set; }
    }

    //Embed模板消息
    public class MessageEmbed
    {
        //标题
        [JsonPropertyName("title")]
        public string Title { get; set; }

        //消息弹窗内容
        [JsonPropertyName("prompt")]
        public string Prompt { get; set; }

        //缩略图
        [JsonPropertyName("thumbnail")]
        public MessageEmbedThumbnail Thumbnail { get; set; }

        //embed字段数据
        [JsonPropertyName("fields")]
        public MessageEmbedField[] Fields { get; set; }
    }

    //缩略图
    public class MessageEmbedThumbnail
    {
        //图片地址
        [JsonPropertyName("url")]
        public string url { get; set; }
    }

    //embed字段数据
    public class MessageEmbedField
    {
        //字段名
        [JsonPropertyName("name")]
        public string Name { get; set; }
    }

    //Ark消息
    public class MessageArk
    {
        //ark模板ID(需要先申请)
        [JsonPropertyName("template_id")]
        public int Template_id { get; set; }

        //kv值列表
        [JsonPropertyName("kv")]
        public MessageArkKv[] Kv { get; set; }
    }

    //ArkKv值
    public class MessageArkKv
    {
        //key
        [JsonPropertyName("key")]
        public string Key { get; set; }

        //value
        [JsonPropertyName("value")]
        public string Value { get; set; }

        //ark obj 类型的列表
        [JsonPropertyName("obj")]
        public MessageArkObj[] obj { get; set; }
    }

    //Ark obj类型
    public class MessageArkObj
    {
        //ark objkv列表
        [JsonPropertyName("obj_kv")]
        public MessageArkObjKv[] Obj_Kv { get; set; }
    }

    //ArkObjKv
    public class MessageArkObjKv
    {
        //key
        [JsonPropertyName("key")]
        public string key { get; set; }

        //value
        [JsonPropertyName("value")]
        public string Value { get; set; }
    }

    //引用消息
    public class MessageReference
    {
        //需要引用回复的消息id
        [JsonPropertyName("message_id")]
        public string Message_id { get; set; }

        //是否忽略获取引用消息详情错误，默认否
        [JsonPropertyName("ignore_get_message_error")]
        public bool Ignore_Get_Message_Error { get; set; }
    }

    //消息审核对象
    public class MessageAudited
    {
        //消息审核ID
        [JsonPropertyName("audit_id")]
        public string Audit_Id { get; set; }

        //消息id,只有通过审核事件才会有值
        [JsonPropertyName("message_id")]
        public string Message_id { get; set; }

        //频道ID
        [JsonPropertyName("guild_id")]
        public string Guild_Id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string Channel_Id { get; set; }

        //消息审核事件
        [JsonPropertyName("audit_time")]
        public DateTime Audit_Time { get; set; }

        //消息创建时间
        [JsonPropertyName("create_time")]
        public DateTime Create_Time { get; set; }

        //子频道消息 seq，
        //用于消息间的排序，
        //seq 在同一子频道中按从先到后的顺序递增，
        //不同的子频道之前消息无法排序
        [JsonPropertyName("seq_in_channel")]
        public string Seq_In_Channel { get; set; }
    }

    //md消息
    public class MessageMarkDown
    {
        //markdown 模板id
        [JsonPropertyName("template_id")]
        public int Template_Id { get; set; }

        //markdown 模板参数
        [JsonPropertyName("params")]
        public MessageMarkdownParams[] Params { get; set; }

        //原生 markdown 内容,与 template_id 和 params参数互斥,参数都传值将报错。
        [JsonPropertyName("content")]
        public string content { get; set; }
    }
    //markdown 模板参数
    public class MessageMarkdownParams
    {
        //markdown 模板 key
        [JsonPropertyName("key")]
        public string Key { get; set; }

        //markdown 模版 key 对应的 values ，
        //列表长度大小为 1 代表单 value 值，
        //长度大于1则为列表类型的参数 values 传参数
        [JsonPropertyName("values")]
        public string[] Values { get; set; }
    }

    //含有消息按钮组件的消息
    public class MessageMarkDownMessageKeyboard
    {
        //keyboard 模板 id
        [JsonPropertyName("id")]
        public int id { get; set; }


        //自定义 keyboard 内容,与 id 参数互斥,参数都传值将报错
        [JsonPropertyName("content")]
        public InlineKeyboard content { get; set; }
    }
}